闲谈神经网络--写给初学者(三)

接上篇。

  前面两篇讲解了神经网络就是一个黑箱,里面有一个一个的小圆球(神经元)连接而成,通过改变神经元的连接方式及各个参数,就可以实现一个符合要求的神经网络。接下来我们来举一个BP神经网络的例子,以加深理解。

  在讲解这个例子之前,大概说一下一个神经网络解决问题的思路:

  1.对要解决的问题进行理解,找到输入输出数据。

  2.把已知的输入输出数据分为两部分:一部分用来训练网络;另外一部分来验证训练的网络到底好不好用。

  3.对输入数据进行预处理及归一化处理。

  4.创建合适的网络,如BP、感知器、RBF、Hopfield等等。(其实是先建立一个神经网络的黑箱子)

  5.设置网络训练参数,例如设置训练函数,学习函数、激活函数等等。

  6.使用输入输出训练网络。(其实是把黑箱子里面的神经元的各个参数给训练和学习合适了)

  7.使用验证数据验证网络。

  8.验证后觉得网络还不错,就可以实际应用,在实际应用过程中,还可以再对模型进行优化、重构等等。

下面开始我们例子的说明,用一个传统的花分类的例子(http://en.wikipedia.org/wiki/Iris_flower_data_set ):大概意思是:给你一朵花的四个特征,神经网络输出它的品种(共有三个品种)。

所以每一个样本的输入:四个数据,代表花的四个特征;输出:一个数据,代表花的品种,分别为1,2,3代表三个不同的品种。

样本数据为:https://files.cnblogs.com/wuguanglei/%E6%95%B0%E6%8D%AE.rar

其中trainData.txt用作训练数据,testData.txt用作验证数据。Matlab程序代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
%0.操作前
clear;
close all;
clc;
%1.读入训练数据
[f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150);
input=[f1,f2,f3,f4]';%神经网络是一列算做一个样本输入,因此矩阵要转置一下
output=class';
%2.输入数据归一化
[input,Se] = mapminmax(input)  ;
minI=Se.xmin;
maxI=Se.xmax;
%3.构造输出数据矩阵
s = length( class) ;%输出为1,2,3,这用1 0 0表示1;0 1 0表示2;0 0 1表示3
output = zeros( 3, s  ) ;
for i = 1 : s 
   output( class( i ),i  ) = 1 ;
end
  
%4.创建神经网络
net = newff( minmax(input) , [70 3] , { 'logsig' 'logsig' } , 'traingdx' ) ; %其中70表示第一层70个神经元,第二层30个神经元,后面几个参数分别设置的是激活函数和训练函数。
  
%5.设置训练参数
net.trainparam.show = 40 ;
net.trainparam.epochs = 600 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
  
%6.开始训练
[net,tr,e] = train( net, input , output ) ;
  
%7.测试网络
[t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);
testInput=[t1,t2,t3,t4]';
testInput = mapminmax (testInput ) ;
Y = sim( net , testInput ) ;
  
%8.统计结果
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
    [m , Index] = max( Y( : ,  i ) ) 
    if( Index  == c(i)   ) 
        hitNum = hitNum + 1 ; 
    end
end
sprintf('识别率是 %0.3f%%',100 * hitNum / s2 )

 

详细讲解看代码注释吧。

 

 就先写到这儿吧,对于入门,应该够了。

posted on 2014-11-19 10:24  船长  阅读(643)  评论(1编辑  收藏  举报